#include "Reproduction.h"

void Reproduction_init(t_liste* pRattaupe, t_motte** pMotte,SDL_Surface* ecran){
	int eLigne, eColonne;
	t_rattaupes Rattaupe;

	for(eLigne=1;eLigne<elmax-1;eLigne++){
		for(eColonne=0;eColonne<ecmax;eColonne++){
			if(pMotte[eLigne][eColonne].eTaupes>=2){
				//Si il y a plus de 2 rattaupes
				if(bSexe_Verif(pRattaupe,eLigne,eColonne)){
					en_tete(pRattaupe);
					valeur_elt(pRattaupe,&Rattaupe);

					while(Rattaupe.ePosX!=eLigne&&Rattaupe.ePosY!=eColonne&&Rattaupe.Sexe!=Femelle&&Rattaupe.Age!=Adulte){
						suivant(pRattaupe);
						valeur_elt(pRattaupe,&Rattaupe);
					}
					Reproduction_Ajout(pRattaupe,eLigne,eColonne,ecran);
				}
			}				
		}
	}
}

int bSexe_Verif(t_liste* pRattaupe, int eLigne, int eColonne){
	t_rattaupes Rattaupe;
	int Sexe[1]={0};

	en_tete(pRattaupe);

	while(!hors_liste(pRattaupe)){
		valeur_elt(pRattaupe,&Rattaupe);
		if(Rattaupe.ePosX==eLigne&&Rattaupe.ePosY==eColonne){
			if(Rattaupe.Sexe==Male&&Rattaupe.Age==Adulte)
				Sexe[0]=1;
			else if(Rattaupe.Sexe==Femelle&&Rattaupe.Age==Adulte&&Rattaupe.eDelaiGrossesse==6)
				Sexe[1]=1;		
		}
		suivant(pRattaupe);
	}
	if(Sexe[0]==1&&Sexe[1]==1)
		return 1;
	else
		return 0;
}

void Reproduction_Ajout(t_liste* pRattaupe, int eLigne, int eColonne,SDL_Surface* ecran){
	t_rattaupes RattaupeMere;
	char Accoucher[100] = "";
	SDL_Surface *SDL_Texte = NULL, *SDL_Clean = NULL;

	en_tete(pRattaupe);
	valeur_elt(pRattaupe,&RattaupeMere);

	while(RattaupeMere.ePosX!=eLigne||RattaupeMere.ePosY!=eColonne||RattaupeMere.Sexe!=Femelle||RattaupeMere.eDelaiGrossesse!=6||RattaupeMere.Age!=Adulte){
		suivant(pRattaupe);
		valeur_elt(pRattaupe,&RattaupeMere);
	}

	if(RattaupeMere.eDelaiGrossesse==6&&RattaupeMere.ePosX==eLigne&&RattaupeMere.ePosY==eColonne&&RattaupeMere.Age==Adulte&&RattaupeMere.Sexe==Femelle){
		RattaupeMere.eGestation=4;
		RattaupeMere.eDelaiGrossesse=0;
		modif_elt(pRattaupe,RattaupeMere);
		sprintf(Accoucher, "Votre femelle (%i,%i) accouchera d'un bébé dans %i tours",RattaupeMere.ePosX,RattaupeMere.ePosY,RattaupeMere.eGestation-1);
		SDL_Ecrire(ecran, SDL_Texte, 100, Accoucher, LARGEUR_FENETRE-335, HAUTEUR_FENETRE+ESPACE_MENU-20);
		SDL_Flip(ecran);
		SDL_Delay(2000);
		SDL_Rect_Blanc(ecran,SDL_Clean, 20, 335, LARGEUR_FENETRE-335, HAUTEUR_FENETRE+ESPACE_MENU-20);//Enceinte
		SDL_Flip(ecran);
	}
}

void Accouchement(t_liste* pRattaupe, t_motte** pMotte,SDL_Surface* ecran){
	int eSexeHasard;	
	t_rattaupes Rattaupe;	
	t_rattaupes RattaupeMere;
	char Accoucher[100] = "";
	SDL_Surface *SDL_Texte = NULL, *SDL_Clean = NULL;

	en_tete(pRattaupe);
	valeur_elt(pRattaupe,&RattaupeMere);

	while(!hors_liste(pRattaupe)){

		if(RattaupeMere.eGestation==1&&RattaupeMere.Age==Adulte&&RattaupeMere.Sexe==Femelle){
			sprintf(Accoucher, "Un bébé est né dans votre tribu (%i,%i)",RattaupeMere.ePosX,RattaupeMere.ePosY);
			SDL_Ecrire(ecran, SDL_Texte, 100, Accoucher, LARGEUR_FENETRE-230, HAUTEUR_FENETRE+ESPACE_MENU-20);
			SDL_Flip(ecran);
			SDL_Delay(2000);
			SDL_Rect_Blanc(ecran,SDL_Clean, 20, 250, LARGEUR_FENETRE-230, HAUTEUR_FENETRE+ESPACE_MENU-20);//Enceinte
			SDL_Flip(ecran);

			Rattaupe.ePosX=RattaupeMere.ePosX;
			Rattaupe.ePosY=RattaupeMere.ePosY;
			Rattaupe.eSante=100;
			Rattaupe.Age=Jeune;
			Rattaupe.eGestation=0;
			Rattaupe.eDelaiGrossesse=0;
			eSexeHasard= eHasard(0,2);
			switch (eSexeHasard){
				case 0 : Rattaupe.Sexe=Male; break;
				case 1 : Rattaupe.Sexe=Femelle; break;
			}
			ajout_droit(pRattaupe,Rattaupe);
			pMotte[Rattaupe.ePosX][Rattaupe.ePosY].eTaupes++;

			precedent(pRattaupe);
			RattaupeMere.eDelaiGrossesse=0;
			RattaupeMere.eGestation=0;
			modif_elt(pRattaupe,RattaupeMere);
		}

		suivant(pRattaupe);
		valeur_elt(pRattaupe,&RattaupeMere);
	}	
}

